<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /**
     * 变量提升：允许在变量声明之前即被访问
     * 函数提升与变量提升比较类似，函数在声明之前即可被调用
     *
     * 为了代码可读性， 不推荐使用提升
     */

    // 访问变量 str
    console.log(str + 'world!');
    // 声明变量 str
    var str = 'hello '; // let` 声明的变量不存在变量提升，推荐使用 `let`

    // 调用函数
    foo()
    // 声明函数
    function foo() {
        console.log('声明之前即被调用...')
    }

    // 函数表达式不存在提升现象
    bar()  // 错误
    var bar = function () {
        console.log('函数表达式不存在提升现象...')
    }
</script>
</body>
</html>